package com.example.compreshensiveshop.service.imp;

import com.example.compreshensiveshop.dao.SkuDao;
import com.example.compreshensiveshop.dto.SkuCreateDTO;
import com.example.compreshensiveshop.dto.SkuUpdateDTO;
import com.example.compreshensiveshop.po.SkuPO;
import com.example.compreshensiveshop.service.SkuService;
import com.example.compreshensiveshop.vo.SkuListVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * Sku Service Implementation
 */
@Service
public class SkuServiceImpl implements SkuService {
    @Autowired
    private SkuDao skuDao;

    @Override
    public void addProductSku(SkuCreateDTO skuCreateDTO) {
        //TODO:在此根据查询的商品，对商品的显示价格和库存进行更新
        SkuPO skuPO = SkuPO.builder()
                .productId(skuCreateDTO.getProductId())
                .name(skuCreateDTO.getName())
                .price(skuCreateDTO.getPrice())
                .stock(skuCreateDTO.getStock())
                .status(skuCreateDTO.getStatus())
                .build();
        skuDao.addProductSku(skuPO);

    }

    @Override
    public List<SkuListVO> queryByPId(Long productId) {
        List<SkuPO> skuPOList = skuDao.queryByPId(productId);
        List<SkuListVO> skuListVOS = new ArrayList<>();
        for(SkuPO skuPO : skuPOList){
            SkuListVO skuListVO = SkuListVO.builder()
                    .id(skuPO.getId())
                    .productId(skuPO.getProductId())
                    .name(skuPO.getName())
                    .price(skuPO.getPrice())
                    .stock(skuPO.getStock()-skuPO.getFrozenStock())
                    .sale(skuPO.getSale())
                    .status(skuPO.getStatus())
                    .build();
                    skuListVOS.add(skuListVO);
        }
        return skuListVOS;
    }

    @Override
    public void updateProductSku(SkuUpdateDTO skuUpdateDTO) {
        //TODO:在此根据查询的商品，对商品的显示价格和库存进行更新
        SkuPO skuPO = SkuPO.builder()
                .id(skuUpdateDTO.getId())
                .productId(skuUpdateDTO.getProductId())
                .name(skuUpdateDTO.getName())
                .price(skuUpdateDTO.getPrice())
                .stock(skuUpdateDTO.getStock())
                .status(skuUpdateDTO.getStatus())
                .build();
        skuDao.updateProductSku(skuPO);
    }

    @Override
    public void lockStock(Long skuId, Integer quantity) {
        skuDao.lockStock(skuId, quantity);
    }

    @Override
    public void backStock(Long skuId, Integer quantity) {
        skuDao.backStock(skuId, quantity);
    }

    @Override
    public Integer queryStock(Long productId) {
        return skuDao.queryStock(productId);
    }

    @Override
    public void releaseStock(Long skuId, Integer quantity) {
        skuDao.releaseStock(skuId, quantity);
    }

    @Override
    public void checkStock(Long skuId, Integer quantity) {
        SkuPO skuPO = skuDao.queryById(skuId);
        if(skuPO.getStock()-skuPO.getFrozenStock()< quantity){
            throw new RuntimeException("库存不足");
        }
    }

    @Override
    public String queryProductSkuName(Long skuId) {
        return skuDao.queryProductSkuName(skuId);
    }


}